import logging
from flask import current_app,render_template, jsonify
from flask import request
from flask import session

from info import constants
from info import redis_store
from info.models import User, News, Category
from info.utils.response_code import RET
from . import index_blu


# 显示新闻列表数据
# 请求路径: /newslist
# 请求方式: GET
# 请求参数: cid,page,per_page
# 返回值: data数据
@index_blu.route('/newslist')
def newslist():
    """
    思路分析：
    1.接受参数
    cid: 种类的id,最新为1，new中没有1的分类，平时浏览的网站也没有最新分类，都是取创建时间最新的显示
    page:页数（哪一页的意思）
    per_page:每一页多少数据
    2,转换类型
    3.查询数据库数据
    4.取出需要返回的数据
    5.返回数据
    :return:
    """
    # 接受参数
    data_dict = request.args
    cid = data_dict.get('cid',1)
    page = data_dict.get('page',1)
    per_page = data_dict.get('per_page',10)
    # 转换类型

    try:
        page = int(page)
        per_page = int(per_page)
    except Exception as e:
        current_app.logger.error(e)
        page = 1
        per_page =10
    # 查询数据库数据
    try:
        filters =[News.status == "0"]
        if cid !="1":
            filters.append(News.category_id ==cid)
        paginate= News.query.filter(*filters).order_by(News.create_time.desc()).paginate(page,per_page,False)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR,errmsg="数据库查询错误")
    # 取出需要返回的数据
    totalPage = paginate.pages
    currentPage = paginate.page
    items = paginate.items
    # items是需要返回的数据，把数据对象转换为字典对象返回
    news_list = []
    for news in items:
        news_list.append(news.to_dict())

    # 返回数据
    return jsonify(errno=RET.OK,errmsg="发送成功",totalPage =totalPage,currentPage =currentPage,newsList=news_list)



@index_blu.route('/',methods=['GET','POST'])
def index():

    # redis存到session里面
    # redis_store.set('name','heima')
    # session['name']='heima'
    # print(session.get('name'))
    # logging.debug('警告信息')
    # current_app.logger.debug('警告信息') # 在控制台打印会打印横线隔开，方便查找。在文件中输出打印信息和logging.debug()一样

    # 渲染用户登录信息
    user_id = session.get('user_id')
    user=None
    if user_id:
        try:
            user = User.query.get(user_id)
        except Exception as e:
            current_app.logger.erro(e)

    # 处理热门新闻，查询前10条
    # 获取排行数据
    new_list=None
    try:
        new_list = News.query.order_by(News.clicks.desc()).limit(constants.CLICK_RANK_MAX_NEWS).all()
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg="查询新闻失败")
    click_new_list=[]
    for news in new_list if new_list else []:
        click_new_list.append(news.to_dict())
    try:
     categories = Category().query.all()
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg="分类信息查询失败")
    # current_app.logger.error(categories)
    categories_dict = []
    for category in categories:
        categories_dict.append(category.to_dict())



    data={
        'user_info':user.to_dict()if user else '',
        'click_new_list':click_new_list,
        'categories':categories_dict
    }


    return render_template('news/index.html',data=data)



# 设置网站logo图标
# 可以使用current_app.send_static_file(),自动加载static静态文件下面的内容
@index_blu.route('/favicon.ico')
def web_logo():
    return current_app.send_static_file('news/favicon.ico')